Enterprises are increasingly capturing, storing, and mining a plethora of information related to communications with their customers and related to their day-to-day internal operations. Often this information is stored and indexed within databases. Once the information is indexed, queries are developed on an as-needed basis to mine the information from the database for a variety of organizational goals, such as marketing, planning, reporting, etc.
In fact, the size of the databases can be daunting and each database can include many terabytes of information. To deal with this, an enterprise deploys a variety of hardware resources: storage devices, processing devices, network devices, etc. In addition, a variety of software resources are needed to optimally utilize the hardware resources associated with databases. Still further a plethora of expensive and skilled support and development staff is needed to maintain the databases and keep them operational.
One solution to address performance of the software resources is the efficient development of indexes of a database. A good index can significantly improve search response time, especially when the database is sufficiently large. Generally, large indexes are partitioned to improve the search performance of the database. The partitioning is done during the database design phase and remains largely unchanged after that point. Additionally, the complexity and size of the database can change significantly over time. Thus, in less a design for partitioning is well thought out and the database remains largely static, the conventional approaches are only marginally beneficial.
Furthermore, sometimes a column of a database table that was not originally partitioned becomes a good candidate for partitioning. Yet, existing techniques may not discover this situation for some time and in the interim the search performance of that column suffers.
Thus, improved mechanisms for partitioning indexes of a database are desirable.